home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / edit / pt20pc.zip / FF.C < prev    next >
C/C++ Source or Header  |  1991-02-04  |  2KB  |  86 lines

  1. #include "dos.h"
  2. #include "stdlib.h"
  3.  
  4. #define MAXHANDLES 40
  5. unsigned char handleTable[MAXHANDLES];
  6.  
  7. main(argc, argv)
  8.     char *argv[];
  9. {
  10.     unsigned int far *fp;
  11.     unsigned int far *fp2;
  12.     unsigned char far *oldHandleTable;
  13.     unsigned char far *newHandleTable;
  14.     struct SREGS sr;
  15.     unsigned char fileName[100];
  16.     int fid;
  17.     int i, nOldHandles, nNewHandles;
  18.     union REGS regs;
  19.  
  20.     segread(&sr);
  21.     printf("cs=0x%X  ds=0x%X\n", sr.cs, sr.ds);
  22.     /* get the old handle table information */
  23.     FP_OFF(fp) = 0x32;
  24.     FP_SEG(fp) = _psp;
  25.     nOldHandles = *fp;
  26.     printf(
  27.     "nOldHandles=%d [0x%X]   offset=%d [0x%X]   segment=%d [0x%X]\n",
  28.         nOldHandles, nOldHandles,
  29.         *(fp+1), *(fp+1), *(fp+2), *(fp+2) );
  30.  
  31.     /* set oldHandleTable to point to the original handle table */
  32.     FP_OFF(oldHandleTable) = *(fp+1);
  33.     FP_SEG(oldHandleTable) = *(fp+2);
  34.     
  35.     for(i = 0; i < nOldHandles; ++i ) {
  36.         printf("%4d=0x%2X       ", i, oldHandleTable[i]);
  37.     }
  38.     printf("\n");
  39.  
  40.     for(i = 0; i < nOldHandles; ++i ) {
  41.         handleTable[i] = oldHandleTable[i];
  42.     }
  43.     for(i = nOldHandles; i < MAXHANDLES; ++i)
  44.         handleTable[i] = 0xFF;
  45.  
  46.     fp2 = (unsigned char far *)(&handleTable[0]);
  47. printf("&handleTable[0]=%lX\n", fp2);
  48. printf("Ready to set up the new handle table\n");
  49. getch();
  50.     *fp = MAXHANDLES;
  51.     *(fp+1) = FP_OFF(fp2);
  52.     *(fp+2) = FP_SEG(fp2);
  53.  
  54.     nNewHandles = *fp;
  55.     printf(
  56.     "nNewHandles=%d [0x%X]   offset=%d [0x%X]   segment=%d [0x%X]\n",
  57.         nNewHandles, nNewHandles,
  58.         *(fp+1), *(fp+1), *(fp+2), *(fp+2) );
  59.     FP_OFF(newHandleTable) = *(fp+1);
  60.     FP_SEG(newHandleTable) = *(fp+2);
  61.     for(i = 0; i < MAXHANDLES; ++i ) {
  62.         printf("%4d=0x%2X       ", i, newHandleTable[i]);
  63.     }
  64.     printf("\n");
  65.  
  66. printf("Ready to open some files\n");
  67. getch();
  68.     /* now open some files */
  69.     for(i = 1; i < 25; ++i) {
  70.         sprintf(fileName, "t%02d", i);
  71.         regs.h.ah = 0x3D;    /* open file */
  72.         regs.h.al = (unsigned char)0;
  73.         regs.x.dx = (int)fileName;
  74.         intdos(®s, ®s);
  75.         fid = regs.x.ax;
  76.         printf("open(%s)=%2d    ", fileName, fid);
  77.     }
  78.     for(i = 0; i < MAXHANDLES; ++i ) {
  79.         printf("%4d=0x%2X       ", i, newHandleTable[i]);
  80.     }
  81.     printf("\n");
  82.  
  83. printf("\nReady to exit\n");
  84. getch();
  85. }
  86.